;--------------------------------------------------------
;	Otobrajaet na ekran sektor (256 byte)
; 	-------------------------------------
; Vizovi: Disp_line, Send_crlf
;
Disp_sector:
	push cx
	push dx
	push ds
	mov ax,data
	mov ds,ax
	call Clear_screen
	Out_str Spravochnay_stroka
	xor dx,dx		;Nachalo sektora
	mov cx,16		;Chislo strok
.M:     call Disp_line		;Vivod stroki
	call Send_crlf		;Perevod stroki
	add dx,16		;Nomer sleduychego byta
	loop .M			;Proverka chisla strok
	Out_str Msg2
	pop ds
	pop dx
	pop cx	
	ret
;
;	Procedura dampiruet 16 byte pamyati v odnu
;		stroku shestnadcetirichnih chisel
;	------------------------------------------
; Vhodi: DX - nomer pervogo byta stroki v Sector
; Vizovi: Write_hex, Write_char
; Chtenie: Sector
;
Disp_line:
	Push_6 ax,bx,cx,dx,si,di	
	mov bx,dx		;V BX nomer pervogo byta
	mov cx,16		;Schetchik bytov
	add dx,[es:Address] 	;Address pervogo byta stroki
	call Write_word_hex     ;Vivod addressa
	mov dl,' '		;Vivod na ekran
	call Write_char		; probela	
	push bx
.M:	mov dl,[es:Sector+bx]	;Poluchit 1 byte
	call Write_byte_hex	;Vivod shestnadcetirichnogo chisla
	mov dl,' '		;Vivod na ekran
	call Write_char		; probela
	inc bx			;Vozvrat za sleduishim
	loop .M			; bytom
	pop bx
	mov cx,16		;Schetchik bytov
.N:	mov dl,[es:Sector+bx]	;Poluchit 1 byte
	call Write_char		;Vivod simvola
	inc bx			;Vozvrat za sleduishim
	loop .N			; bytom
	Pop_6 ax,bx,cx,dx,si,di
	ret
;
;	Kopiruet v peremennuy Sector soderjimoe sektora pamyti, nachalnii
;		adres kotorogo v peremennoi Address
;	-----------------------------------------------------------------
;
Read_sector:
	Push_6 ax,bx,cx,dx,si,di		
	pushf				;Sohranit flag napravleniy DF
	push ds
	mov ax,data
	mov ds,ax
	cmp [es:Pf],byte 1
	jnz .M
	xor cx,cx                       ;�������� ����������� ���������
	mov dx,[es:Address]		; ����� - Address
	mov bx,[es:Lognum]			;���������
	mov al,0			; ���������
	mov ah,42h			; �� ������������ �������
	int 21h				; �����
	mov cx,256
	xor bx,bx
.loop:	mov [es:Sector+bx],byte 0
	inc bx
	loop .loop
	mov ah,3fh			;������� ������ �� �����
	mov bx,[es:Lognum]			;BX <- �����. ����� ��������� �����
	mov cx,256			;CX <- ����� �������� ������
	mov dx,Sector			;DX <- �����-�������� ������
	int 21h				;������ �� ����� � �����
	jnc .Exit			;���� �������
	mov dx,Msg5			;����� ���������
	mov ah,9			; �� ������
	int 21h				; ������ �����
	call Send_crlf                  ;������� ������
        mov ah,1			;���� �������
	int 21h				; � ����������
	jmp .Exit			;�� ���������� ���������
.M:	mov si,[es:Address]	;Otkuda kopirovat
	mov di,Sector		;Kuda kopirovat
	cld			;Sbrosit flag DF
	mov cx,256		;V schetchike chislo byte
rep	movsb			;Peresilka cepochki bytov
.Exit:	pop ds	
	popf			;Vostanovit flag DF
	Pop_6 ax,bx,cx,dx,si,di	
	ret
;
;	Pomeschaet v peremennuy Sector nachalniy sektor segmenta pamyti
;	---------------------------------------------------------------
;
Init_sector:
	push si
	mov si,0h
	mov [es:Address],si
	call Read_sector
	call Disp_sector
	pop si
	ret
;
;	Pomeschaet v peremennuy Sector prediduschiy sektor segmenta pamyti
;	------------------------------------------------------------------
;
Prev_sector:
	push si
	mov si,[es:Address]
	or si,0h
	jz .jz
	sub si,100h
	mov [es:Address],si
.jz:	call Read_sector
	call Disp_sector
	pop si
	ret
;
;	Pomeschaet v peremennuy Sector sleduyschiy sektor segmenta pamyti
;	-----------------------------------------------------------------
;
Next_sector:
	push si
	mov si,[es:Address]
	cmp si,0FF00h
	jz .jz
	add si,100h
	mov [es:Address],si
.jz:	call Read_sector
	call Disp_sector
	pop si
	ret
;
;	Pomeschaet v peremennuy Sector N-yi sektor segmenta pamyti
;	-----------------------------------------------------------------
;
N_sector:
	push ax
	push dx
	push si
	push ds
	mov ax,data
	mov ds,ax
	call Send_crlf
	Out_str Zagolovok_Vvoda_Sectora
	call Read_byte_hex
	shl si,8
	mov [es:Address],si
.jz:	call Read_sector
	call Disp_sector
	pop ds
	pop si
	pop dx
	pop ax
	ret

Write_sector:
	Push_6 ax,bx,cx,dx,si,di		
	pushf			;Sohranit flag napravleniy DF
	push ds
	push es
	mov ax,data
	mov ds,ax
	cmp [es:Pf],byte 1
	jnz .M
	xor cx,cx                       ;�������� ����������� ���������
	mov dx,[es:Address]		; ����� - Address
	mov bx,[es:Lognum]			;���������
	mov al,0			; ���������
	mov ah,42h			; �� ������������ �������
	int 21h				; �����
        mov ah,40h			;������� ������ � ����
	mov bx,[es:Lognum]			;BX <- �����. ����� ������������� �����
	mov cx,256			;CX <- ����� ������������ ������
	mov dx,Sector			;DX <- �����-�������� ������
	int 21h				;������ �� ������ � �����
        jnc .Exit			;���� �������
	Out_str Msg6                    ;����� ��������� �� ������ ������ �����
	call Send_crlf                  ;������� ������
        mov ah,1			;���� �������
	int 21h				; � ����������
	jmp .Exit			;�� ���������� ���������
.M:	mov si,Sector		;Otkuda kopirovat
	mov di,[es:Address]	;Kuda kopirovat
	cld			;Sbrosit flag DF
	mov cx,256		;V schetchike chislo byte
rep	movsb			;Peresilka cepochki bytov
.Exit:	pop es
	pop ds
	popf			;Vostanovit flag DF
	Pop_6 ax,bx,cx,dx,si,di	
	ret


	
